#ifndef HFT_EXECUTION_ENGINE_H
#define HFT_EXECUTION_ENGINE_H

#include "execution/order_manager.h"
#include <string>
#include <functional>
#include <chrono>

namespace hft {

enum class OrderType {
    Market,
    Limit,
    Stop,
    StopLimit
};

enum class OrderSide {
    Buy,
    Sell
};

class ExecutionEngine {
public:
    virtual ~ExecutionEngine() = default;
    
    virtual bool sendOrder(const Order& order) = 0;
    virtual bool modifyOrder(const Order& order) = 0;
    virtual bool cancelOrder(const Order& order) = 0;
    
    virtual void setOrderCallback(std::function<void(const Order&)> callback) = 0;
    virtual void setTradeCallback(std::function<void(const Trade&)> callback) = 0;
    
    virtual bool connect() = 0;
    virtual void disconnect() = 0;
    virtual bool isConnected() const = 0;
    
    virtual int64_t getExchangeTime() const = 0;
};

} // namespace hft

#endif // HFT_EXECUTION_ENGINE_H